package utils {
	/**
	 * Clase de ayuda para crear enumeraciones.
	 */
	public final class Enum {
		/**
		 * Siguiente valor en la enumeración.
		 */
		private var next:uint;
		/**
		 * Nombres de los items de la enumeración.
		 */
		private var names:Array;
		
		/**
		 * Constructor.
		 * @param storeNames ¿Guardar nombres de los items?
		 */
		public function Enum(storeNames:Boolean = false):void {
			next = 1;
			if (storeNames) {
				names = new Array();
			}
		}
		
		/**
		 * Agrega un valor a la enumeración.
		 * @param name El nombre del item en la enumeración.
		 * @return El número correspondiente al item agregado.
		 */
		public function add(name:String = null):uint {
			if (names) {
				if (name == null) {
					name = String(next);
				}
				names.push(name);
			}
			return next++;
		}
		
		/**
		 * Obtiene el nombre asignado a item de la enumeración.
		 * @param El número correspondiente al item.
		 * @return El nombre del item.
		 */
		public function getName(value:uint):String {
			return names[value-1];
		}
	}
}
